/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package com.fifa.informacion_mundialista.controllers;

import com.stefanini.informacion_mundialista.ejbs.GrupoManager;
import com.stefanini.informacion_mundialista_data.entities.Grupo;
import java.io.IOException;
import java.io.Serializable;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.EJB;
import javax.enterprise.context.SessionScoped;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.inject.Named;


/**
 *
 * @author gbuitrago
 */
@Named(value = "gruposAdminController") // se coloca la primera en mayuscula para no confundirlo con la clase
@SessionScoped
public class GruposAdminController implements Serializable {
    
    private static final long serialVersionUID = 1L;
    
     private Grupo grupo;

    @EJB
    private GrupoManager grupoManager;
    
    private List<Grupo> grupos;  

    private boolean realizarConsulta = true;
    private boolean isEdit = false;
    
    public void initCreate(){
        grupo = new Grupo();
        isEdit = false;
        try {
            FacesContext.getCurrentInstance().getExternalContext().redirect("/informacion_mundialista/pages/grupos/gruposEdit.xhtml");
        } catch (IOException ex) {
            Logger.getLogger(LoginController.class.getName()).log(Level.SEVERE, "Error al redireccionar", ex);
        }
    }
    
    public void initEdit(Grupo grupoEdit) {
        this.grupo = grupoEdit;
        isEdit = true;
        try {
            FacesContext.getCurrentInstance().getExternalContext().redirect("/informacion_mundialista/pages/grupos/gruposEdit.xhtml");
        } catch (IOException ex) {
            Logger.getLogger(LoginController.class.getName()).log(Level.SEVERE, "Error al redireccionar", ex);
        }
    }
    
    public void guardarGrupo(){
    
        FacesContext ctx = FacesContext.getCurrentInstance();
        
        if(grupoManager.verificarGrupoExistente(grupo.getNombre())) {
            ctx.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error",
                    "Ya existe un grupo con el nombre ingresado"));
        }
        else{
            
            if(grupoManager.guardarGrupo(grupo, isEdit)){
                ctx.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Info",
                    "Grupo creado exitosamente"));
                
                realizarConsulta = true;
            
                try {
                    ctx.getExternalContext().redirect("/informacion_mundialista/pages/grupos/gruposAdmin.xhtml");
                } catch (IOException ex) {
                    Logger.getLogger(LoginController.class.getName()).log(Level.SEVERE,"Error al redireccionar",ex);
                }
            }
            else{
                ctx.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error",
                    "Error al crear el grupo"));
            }
        }
    }
    
    public void eliminaGrupo(Grupo grupo){
        
        FacesContext ctx = FacesContext.getCurrentInstance();
        
        if(grupoManager.eliminarGrupo(grupo))
        {
           ctx.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Info",
                    "Grupo eliminado exitosamente")); 
           realizarConsulta = true;
           consultarGrupos();
        }else{
            ctx.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error",
                    "Error al eliminar el grupo"));
        }
        
        
    }
    
    
    public void consultarGrupos(){
        if(realizarConsulta) {
            grupos = grupoManager.getAllGrupos();
            realizarConsulta = false;
        }
    }
    
    /**
     * @return the grupo
     */
    public Grupo getGrupo() {
        return grupo;
    }

    public void setGrupo(Grupo grupo) {
        this.grupo = grupo;
    }
    
    public List<Grupo> getGrupos() {
        return grupos;
    }

    public void setGrupos(List<Grupo> grupos) {
        this.grupos = grupos;
    }

}
